import java.util.Arrays;


/**
 * 二分查找：从一个有序（这里默认是递增序列）的线性表中找到目标元素，如果找到了，就返回目标元素的下标，没有找到就返回-1或者是null
 * 关键点：1、如果考虑是否为开闭区间，左闭右闭，左闭右开，为何没有左开右闭呢？
 * 2、是通过while循环实现的，而不是通过递归实现的（虽然可能也有递归实现的方法），循环出口和开闭区间有关
 */
public class binarySearch {
    public Integer sort(int[] a,int target){
        int left = 0;
        int right = a.length-1;
        while (left<=right){
            int middle = left+(right-left)/2;
            if (a[middle]==target){
                return middle;
            }else if(a[middle]>target){
                right = middle-1;
            }else if(a[middle]<target){
                left = middle+1;
            }
        }
        return null;
    }
    public static void main(String[] args) {
        var main = new binarySearch();
        int[] a = {1, 2, 3, 5, 6, 6, 7, 7, 8, 8};
        int res = main.sort(a,8);
        System.out.println(res);
    }
}
